home *** CD-ROM | disk | FTP | other *** search
/ Visual Cafe 3 / Visual Cafe 3.ISO / Vcafe / JFC.bin / JPanel.java < prev    next >
Text File  |  1998-06-30  |  6KB  |  177 lines

  1. /*
  2.  * @(#)JPanel.java    1.21 98/03/20
  3.  * 
  4.  * Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved.
  5.  * 
  6.  * This software is the confidential and proprietary information of Sun
  7.  * Microsystems, Inc. ("Confidential Information").  You shall not
  8.  * disclose such Confidential Information and shall use it only in
  9.  * accordance with the terms of the license agreement you entered into
  10.  * with Sun.
  11.  * 
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  15.  * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
  16.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
  17.  * THIS SOFTWARE OR ITS DERIVATIVES.
  18.  * 
  19.  */
  20. package com.sun.java.swing;
  21.  
  22. import com.sun.java.accessibility.*;
  23. import java.awt.*;
  24. import com.sun.java.swing.plaf.ComponentUI;
  25. import com.sun.java.swing.plaf.UIResource;
  26.  
  27. /**
  28.  * JPanel is a generic lightweight container.
  29.  * <p>
  30.  * Warning: serialized objects of this class will not be compatible with
  31.  * future swing releases.  The current serialization support is appropriate 
  32.  * for short term storage or RMI between Swing1.0 applications.  It will
  33.  * not be possible to load serialized Swing1.0 objects with future releases
  34.  * of Swing.  The JDK1.2 release of Swing will be the compatibility
  35.  * baseline for the serialized form of Swing objects.
  36.  *
  37.  * @see <a href="http://java.sun.com/products/jfc/swingdoc-archive/mixing.html">
  38.  * Mixing Heavy and Light Components</a>
  39.  *
  40.  * @beaninfo
  41.  * description: A generic lightweight container.
  42.  * 
  43.  * @version 1.21 03/20/98
  44.  * @author Arnaud Weber
  45.  */
  46. public class JPanel extends JComponent implements Accessible
  47. {
  48.     private static final FlowLayout defaultLayout = new FlowLayout();
  49.     
  50.     /**
  51.      * Creates a new JPanel with the specified layout manager and buffering
  52.      * strategy.
  53.      *
  54.      * @param layout  the LayoutManager to use
  55.      * @param isDoubleBuffered  a boolean, true for double-buffering, which
  56.      *        uses additional memory space to achieve fast, flicker-free 
  57.      *        updates
  58.      */
  59.     public JPanel(LayoutManager layout, boolean isDoubleBuffered) {
  60.         setLayout(layout);
  61.         setDoubleBuffered(isDoubleBuffered);
  62.         setOpaque(true);
  63.         // PENDING(jeff) - this should be done in BasicPanelUI
  64.         // PENDING(steve) - if such a class existed... ;-)
  65.  
  66.         Color bg = this.getBackground();
  67.         if (bg == null || bg instanceof UIResource) {
  68.             this.setBackground(UIManager.getColor("Panel.background"));
  69.         }
  70.  
  71.         Color fg = this.getForeground();
  72.         if (fg == null || fg instanceof UIResource) {
  73.             this.setForeground(UIManager.getColor("Panel.foreground"));
  74.         } 
  75.  
  76.         Font font = this.getFont();
  77.         if (font == null || font instanceof UIResource) {
  78.             this.setFont(UIManager.getFont("Panel.font"));
  79.         } 
  80.     }
  81.  
  82.     /**
  83.      * Create a new buffered JPanel with the specified layout manager
  84.      *
  85.      * @param layout  the LayoutManager to use
  86.      */
  87.     public JPanel(LayoutManager layout) {
  88.         this(layout, true);
  89.     }
  90.  
  91.     /**
  92.      * Create a new JPanel with FlowLayout and the specified buffering
  93.      * strategy. If <code>isDoubleBuffered</code> is true, the JPanel 
  94.      * will use a double buffer.
  95.      *
  96.      * @param layout  the LayoutManager to use
  97.      * @param isDoubleBuffered  a boolean, true for double-buffering, which
  98.      *        uses additional memory space to achieve fast, flicker-free 
  99.      *        updates
  100.      */
  101.     public JPanel(boolean isDoubleBuffered) {
  102.         this(defaultLayout, isDoubleBuffered);
  103.     }
  104.  
  105.     /**
  106.      * Create a new JPanel with a double buffer and a flow layout
  107.      */
  108.     public JPanel() {
  109.         this(defaultLayout, true);
  110.     }
  111.  
  112.     /**
  113.      * PENDING(jeff) - this should be done in BasicPanelUI
  114.      */
  115.     public void updateUI() {
  116.         super.updateUI();
  117.         if(getBackground() == null || getBackground() instanceof UIResource) {
  118.             setBackground(UIManager.getColor("Panel.background"));
  119.         }
  120.     }
  121.  
  122.     
  123.     /**
  124.      * Overriden from JComponent, paint the backgroud if the component is opaque.
  125.      * The color used is the one returned by getBackground()
  126.      * Override this method if you want to change how the JPanel paints its background.
  127.      *
  128.      * @param g the Graphics context in which the painting occurs
  129.      */
  130.     public void paintComponent(Graphics g) {
  131.         if(isOpaque()) {
  132.             g.setColor(getBackground());
  133.             g.fillRect(0,0,getWidth(),getHeight());
  134.         } 
  135.     }
  136.  
  137. /////////////////
  138. // Accessibility support
  139. ////////////////
  140.  
  141.     /**
  142.      * Get the AccessibleContext associated with this JComponent
  143.      *
  144.      * @return the AccessibleContext of this JComponent
  145.      */
  146.     public AccessibleContext getAccessibleContext() {
  147.         if (accessibleContext == null) {
  148.             accessibleContext = new AccessibleJPanel();
  149.         }
  150.         return accessibleContext;
  151.     }
  152.  
  153.     /**
  154.      * The class used to obtain the accessible role for this object.
  155.      * <p>
  156.      * Warning: serialized objects of this class will not be compatible with
  157.      * future swing releases.  The current serialization support is appropriate
  158.      * for short term storage or RMI between Swing1.0 applications.  It will
  159.      * not be possible to load serialized Swing1.0 objects with future releases
  160.      * of Swing.  The JDK1.2 release of Swing will be the compatibility
  161.      * baseline for the serialized form of Swing objects.
  162.      */
  163.     protected class AccessibleJPanel extends AccessibleJComponent {
  164.  
  165.         /**
  166.          * Get the role of this object.
  167.          *
  168.          * @return an instance of AccessibleRole describing the role of the 
  169.          * object
  170.          */
  171.         public AccessibleRole getAccessibleRole() {
  172.             return AccessibleRole.PANEL;
  173.         }
  174.     }
  175. }
  176.  
  177.